﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AvaProvi
{
    [Serializable]
    public class clsDireccion_CRN:clsEstado,IControlEstados
    {
        #region Propiedades de clase
        public string Direccion
        {
            get
            {
                string strDireccion = string.Empty;
                if (this.Calle.Length > 0)
                    strDireccion = "Calle " + this.Calle;
                if (this.NoExterior.Length > 0)
                    strDireccion += ",# " + this.NoExterior;
                if (this.Cruzamiento1.Length > 0)
                    strDireccion += "entre " + this.Cruzamiento1;
                if (this.Cruzamiento2.Length > 0)
                    strDireccion += "y " + this.Cruzamiento2;
                if (this.Colonia.Length > 0)
                    strDireccion += ". Col. " + this.Colonia;
                if (this.Municipio.Length > 0)
                    strDireccion += ", " + this.Municipio;
                if (this.Estado.Length > 0)
                    strDireccion += ", " + this.Estado + ".";
                return strDireccion;
            }
        }

        public string CalleNumero
        {
            get
            {
                string strDireccion = string.Empty;
                if (this.Calle.Length > 0)
                    strDireccion = "Calle " + this.Calle;
                if (this.NoExterior.Length > 0)
                    strDireccion += ",# " + this.NoExterior;
                if (this.Cruzamiento1.Length > 0)
                    strDireccion += "entre " + this.Cruzamiento1;
                if (this.Cruzamiento2.Length > 0)
                    strDireccion += "y " + this.Cruzamiento2;
                if (this.Lote.Length > 0)
                    strDireccion += ", Lt. " + this.Lote;
                if (this.Manzana.Length > 0)
                    strDireccion += ", Mza." + this.Manzana;
                return strDireccion;
            }
        }
        public string Calle { get; set; }
        public string NoExterior { get; set; }
        public string NoInterior { get; set; }
        public string Colonia { get; set; }
        public string CP { get; set; }
        public string Estado { get; set; }
        public string Municipio { get; set; }
        public string Telefono { get; set; }
        public string Lote { get; set; }
        public string Manzana { get; set; }
        public string Nivel { get; set; }
        public string Condominio { get; set; }
        public string Edificio { get; set; }
        public string SuperManzana { get; set; }
        public string Entrada { get; set; }
        public string Cruzamiento1 { get; set; }
        public string Cruzamiento2 { get; set; }
        public bool EsEsquina { get; set; }
        public string EsquinaCon { get; set; }
        public string Tipo { get; set; }
        public clsAvaluo_CRN Avaluo { get; set; }
        #endregion

        #region Constructor
        public clsDireccion_CRN(string tipo, clsAvaluo_CRN avaluo):base()
        {
            this.Calle = string.Empty;
            this.Colonia = string.Empty;
            this.Condominio = string.Empty;
            this.CP = string.Empty;
            this.Cruzamiento1 = string.Empty;
            this.Cruzamiento2 = string.Empty;
            this.Edificio = string.Empty;
            this.Entrada = string.Empty;
            this.EsEsquina = false;
            this.EsquinaCon = string.Empty;
            this.Estado = string.Empty;
            this.Lote = string.Empty;
            this.Manzana = string.Empty;
            this.Municipio = string.Empty;
            this.Nivel = string.Empty;
            this.NoExterior = string.Empty;
            this.NoInterior = string.Empty;
            this.SuperManzana = string.Empty;
            this.Telefono = string.Empty;
            this.Tipo = tipo;
            this.Avaluo = avaluo;
        }
        #endregion

        #region Metodos De Clase

        public bool Guardar()
        {
            if (this.DatosValidos())
            {
                if (this.EsNuevo)
                    return CreaDireccion();
                else
                {
                    if (this.EsModificado)
                        return ActualizaDireccion();
                    else
                        return EliminaDireccion();
                }
            }
            return false;
        }

        private bool EliminaDireccion()
        {
            clsDireccion_CD objDireccion_CD = new clsDireccion_CD();
            return objDireccion_CD.EliminaDireccion(this);
        }

        private bool ActualizaDireccion()
        {
            clsDireccion_CD objDireccion_CD = new clsDireccion_CD();
            return objDireccion_CD.ActualizaDireccion(this);
        }

        private bool CreaDireccion()
        {
            clsDireccion_CD objDireccion_CD = new clsDireccion_CD();
            if (objDireccion_CD.CreaDireccion(this))
            {
                this.EsModificado = true;
                return true;
            }
            return false;
        }

        public bool DatosValidos()
        {
            return true;
        }

        public static clsDireccion_CRN RecuperaDireccion(clsAvaluo_CRN objAvaluo, string tipo)
        {
            clsDireccion_CD objDireccion_CD = new clsDireccion_CD();
            clsDireccion_CRN objDireccion = new clsDireccion_CRN(tipo, objAvaluo);
            dsAvaluos.DireccionesRow objDireccionRecuperada = objDireccion_CD.RecuperaDireccion(objAvaluo.IdAvaluo,tipo);
            if (objDireccionRecuperada != null)
            {
                objDireccion.Calle = objDireccionRecuperada.Calle;
                objDireccion.Colonia = objDireccionRecuperada.Colonia;
                objDireccion.Condominio = objDireccionRecuperada.Condominio;
                objDireccion.CP = objDireccionRecuperada.CP;
                objDireccion.Cruzamiento1 = objDireccionRecuperada.Cruzamiento1;
                objDireccion.Cruzamiento2 = objDireccionRecuperada.Cruzamiento2;
                objDireccion.Edificio = objDireccionRecuperada.Edificio;
                objDireccion.Entrada = objDireccionRecuperada.Entrada;
                objDireccion.EsEsquina = objDireccionRecuperada.EsEsquina;
                objDireccion.EsquinaCon = objDireccionRecuperada.EsquinaCon;
                objDireccion.Estado = objDireccionRecuperada.Estado;
                objDireccion.Lote = objDireccionRecuperada.Lote;
                objDireccion.Manzana = objDireccionRecuperada.Manzana;
                objDireccion.Nivel = objDireccionRecuperada.Nivel;
                objDireccion.NoExterior = objDireccionRecuperada.NoExterior;
                objDireccion.NoInterior = objDireccionRecuperada.NoInterior;
                objDireccion.SuperManzana = objDireccionRecuperada.SuperManzana;
                objDireccion.Telefono = objDireccionRecuperada.Telefono;
                objDireccion.EsModificado = true;
            }
            return objDireccion;
        }

        #endregion
    }
}
